Developers of a computer operating system often use software applications as test engines to find errors, which are commonly called "bugs," in the operating system. Some of the applications make unusual use of functions in the operating system and may lead to the discovery of interesting bugs in the operating system. Testing the applications can also lead to discovery of bugs in the applications.
Because of the large number of applications developed for an operating system, there are many more applications than can be tested manually by human testers. For this reason, test programs have been developed to automate testing of applications. A special group of test programs has been developed. Those test programs are commonly called "monkeys" due to the ways they act on the control items provided by an application. Analogous to a monkey randomly pounding the keys of a typewriter, a "monkey" test program performs common user actions, such as choosing menus, clicking on option buttons, entering characters in edit boxes, etc., in an arbitrary fashion. Because the monkey test programs often do things generally not expected from real users, they may find bugs that are hard to discover otherwise.
To test the control items of an application, a test program has to know at least how to select the control items to trigger the responses of the application. If the graphic control items displayed by the application are implemented using the graphic user interface control library of the operating system, the test program can obtain information regarding the locations and types of the control items to determine where and how to operate on the control items. Many applications, however, have custom control items which are not implemented in the standard way. For example, some applications display toolbar-like controls that are actually bitmap images drawn by the application in the client area of the application window instead of separate controls defined by the operating system. In such a case, the test program may not even recognize the existence of such non-standard graphic control items, and, as a result, cannot test them.